A multi-core processor is a processing system that includes two or more individual processors (cores). A many-core processor is a processor in which the number of cores is large enough so that traditional multi-processor programming techniques are no longer efficient.
Programmers who develop software for many-core processors have to adapt the way they write their programs. That is, in order to write efficient programs for these types of computing environments, programmers have to write asynchronous code, code that can be executed concurrently with other code without interfering with it. Writing non-blocking asynchronous code without language support is difficult because programmers have to write code in continuation passing style (CPS), for example, through the use of callback-based code. Things that are implicit in traditional synchronous programming are made explicit in CPS programming. For example, in traditional coding, when a function is called, it returns a value. In CPS a function takes an explicit continuation argument, a function that receives the result of the computation performed within the original function. Similarly, when a subroutine is invoked within a CPS function the calling function has to supply a procedure to be invoked with the subroutine return value.
Some languages, such as C# for instance, do provide a form of compiler supported continuation passing rewrite by way of an iterator construct. This type of language support is not particularly optimal for recursion and for other types of coding techniques needed for asynchronous programming.